10815. Первый словарь Энди
Энди хочет выписать все слова из
заданного текста и отсортировать их в алфавитном порядке, получив свой первый
словарь. Слова в словаре не повторяются, все большие буквы следует заменить
маленькими. Слова содержат только буквы латинского алфавита.
Вход. Текст
заканчивается символом «конец файла» и содержит не более 5000 строк. Каждая
строка имеет не более 200 символов.
Выход. Вывести все слова из текста в
алфавитном порядке, каждое слово выводить в отдельной строке.
Adventures in Disneyland Two blondes were going to Disneyland when they came to a fork in theroad. The sign read: "Disneyland Left." So they went home.
aadventuresblondescamedisneylandforkgoinghomeinleftreadroadsignsothetheytotwowentwerewhen
обработка текста
Читаем текст, выделяем из него
слова, состоящие из символов латинского алфавита, и заносим их в переменную
типа множество (set). Слова автоматически сортируются. Если некоторое слово в
тексте повторяется, то во множество оно будет занесено только один раз. Далее при помощи итератора
последовательно выводим слова. Если в последовательности букв встречается
апостроф (например andy’s), то такую последовательность считаем как два разных
слова: andy и s.
Объявим переменную SetS типа
set<string>, в которую будем заносить найденные слова. Читать входные
слова будем в символьный массив s.
set<string>
SetS;
set<string>::iterator
iter;
char s[201];
Поскольку текст не обязательно
начинается с буквы латинского алфавита, то пропустим начальные символы, не
являющиеся буквами.
scanf("%[^a-zA-Z]",s);
Читаем слово, состоящее только из
заглавных и прописных букв латинского алфавита в переменную s, заменяем все буквы на маленькие и
заносим слово во множество SetS. Пропускаем все символы, не являющиеся буквами,
читая их в массив s.
while(scanf("%[a-zA-Z]",s)
== 1)
{
for(int i = 0; i < strlen(s); i++) s[i] =
tolower(s[i]);
SetS.insert(s);
scanf("%[^a-zA-Z]",s);
}
Выводим слова в алфавитном порядке.
for(iter = SetS.begin(); iter !=
SetS.end(); iter++)
printf("%s\n",(*iter).c_str());